﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

namespace WaterRegimenMonitor.Web.Code
{
    /// <summary>
    /// 数据库操作辅助类。
    /// </summary>
    public static class DatabaseHelper
    {
        /// <summary>
        /// 安全获得字段值。
        /// </summary>
        /// <typeparam name="T">字段数据类型。</typeparam>
        /// <param name="row">数据行。</param>
        /// <param name="columnName">列名。</param>
        /// <param name="defaultValue">默认值。</param>
        /// <returns></returns>
        public static T SafeGetValue<T>(DataRow row, string columnName, T defaultValue)
        {
            //判断列是否存在
            if (!row.Table.Columns.Contains(columnName))
            {
                //如果不存在，则返回默认值
                return defaultValue;
            }

            //判断是否为空
            if (row.IsNull(columnName))
            {
                //返回默认值
                return defaultValue;
            }

            //获得字段值
            object value = row[columnName];

            //判断类型是否正确
            if (value is T)
            {
                return (T)value;
            }

            //用于保存目标类型
            Type targetType = typeof(T);

            //判断是否为泛型类型
            if (targetType.IsGenericType)
            {
                //获得目标类型
                targetType = targetType.GetGenericTypeDefinition();
            }

            //返回默认值
            try
            {
                return (T)Convert.ChangeType(value, targetType);
            }
            catch
            {
                return defaultValue;
            }

        }
    }
}